////////////////////////////////////////////////////////////////////////
// Last svn revision: $Id:  $ 
////////////////////////////////////////////////////////////////////////
/// \class drow::MLC::MatrixOp
///
/// \brief The static methods for operating on Matrix objects
///
/// \author Douglas Richardson         <douglas.richardson@swyrich.com>
///
/// REVISION HISTORY:\n
/// 	22/03/12 : Douglas Richardson - New File \n
///
/// \details The static operator overloads, methods, and so on for Matrix objects
///
////////////////////////////////////////////////////////////////////////

#ifndef __drow_MLC_MatrixOp__
#define __drow_MLC_MatrixOp__

#include "MLC/AMatrixOp.hh"

namespace drow {
namespace MLC {
    
    //This variable is assigned by the user to determine which set of
    //functions the matrix operations should use.
    static AMatrixOp* matrixOp;
    
    static Matrix operator+( const Matrix &m1, const Matrix &m2) {
        return matrixOp->Add(m1, m2);
    }
    static Matrix operator-( const Matrix &m1, const Matrix &m2) {
        return matrixOp->Subtract(m1, m2);
    }
    static Matrix operator*( const Matrix &m1, const Matrix &m2) {
        return matrixOp->Multiply(m1, m2);
    }
    static Matrix Dot(const Matrix &m1, const Matrix &m2) {
        return matrixOp->Dot(m1, m2);
    }
    static Matrix Cross(const Matrix &m1, const Matrix &m2) {
        return matrixOp->Cross(m1, m2);
    }
    static Matrix Norm(const Matrix &m1, const int normSize) {
        return matrixOp->Norm(m1, normSize);
    }
    static Matrix Transpose(const Matrix &m1) {
        return matrixOp->Transpose(m1);
    }
}
}

#endif